home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2007 December / PCWKCD1207B.iso / Blogowanie poza sfera / Flock 0.9.1.3 stable / flock-0.9.1.3.en-US.win32.exe / flock / chrome / browser.jar / content / browser / preferences / security.js < prev    next >
Text File  |  2007-02-10  |  15KB  |  436 lines

  1. //@line 38 "/cygdrive/K/tinderbuild/src/flock/mozilla/browser/components/preferences/security.js"
  2.  
  3. var gSecurityPane = {
  4.   _pane: null,
  5.  
  6.   /**
  7.    * Initializes master password UI.
  8.    */
  9.   init: function ()
  10.   {
  11.     this._pane = document.getElementById("paneSecurity");
  12.     this._initMasterPasswordUI();
  13.   },
  14.  
  15.   // ADD-ONS
  16.  
  17.   /*
  18.    * Preferences:
  19.    *
  20.    * xpinstall.whitelist.required
  21.    * - true if a site must be added to a site whitelist before extensions
  22.    *   provided by the site may be installed from it, false if the extension
  23.    *   may be directly installed after a confirmation dialog
  24.    */
  25.  
  26.   /**
  27.    * Enables/disables the add-ons Exceptions button depending on whether
  28.    * or not add-on installation warnings are displayed.
  29.    */
  30.   readWarnAddonInstall: function ()
  31.   {
  32.     var warn = document.getElementById("xpinstall.whitelist.required");
  33.     var exceptions = document.getElementById("addonExceptions");
  34.  
  35.     exceptions.disabled = !warn.value;
  36.  
  37.     // don't override the preference value
  38.     return undefined;
  39.   },
  40.  
  41.   /**
  42.    * Displays the exceptions lists for add-on installation warnings.
  43.    */
  44.   showAddonExceptions: function ()
  45.   {
  46.     var bundlePrefs = document.getElementById("bundlePreferences");
  47.  
  48.     var params = this._addonParams;
  49.     if (!params.windowTitle || !params.introText) {
  50.       params.windowTitle = bundlePrefs.getString("addons_permissions_title");
  51.       params.introText = bundlePrefs.getString("addonspermissionstext");
  52.     }
  53.  
  54.     document.documentElement.openWindow("Browser:Permissions",
  55.                                         "chrome://browser/content/preferences/permissions.xul",
  56.                                         "", params);
  57.   },
  58.  
  59.   /**
  60.    * Parameters for the add-on install permissions dialog.
  61.    */
  62.   _addonParams:
  63.     {
  64.       blockVisible: false,
  65.       sessionVisible: false,
  66.       allowVisible: true,
  67.       prefilledHost: "",
  68.       permissionType: "install"
  69.     },
  70.  
  71.   // PHISHING
  72.  
  73.   /*
  74.    * Preferences:
  75.    *
  76.    * browser.safebrowsing.enabled
  77.    * - true if phishing checks of all visited sites are enabled, false if
  78.    *   such checks are disabled
  79.    * browser.safebrowsing.remoteLookups
  80.    * - true if every site is checked against a remote phishing provider for
  81.    *   safety on load, false if a cached list should be used instead
  82.    * browser.safebrowsing.dataProvider
  83.    * - integer identifying the current anti-phishing provider in use
  84.    * browser.safebrowsing.provider.<number>.<property>
  85.    * - identifies each installed Safe Browsing provider; the provider's name is
  86.    *   stored in the "name" property, and the various URLs used in Safe Browsing
  87.    *   detection comprise the values of the rest of the properties
  88.    */
  89.  
  90.   /**
  91.    * Enables/disables the UI for the type of phishing detection used based on
  92.    * whether phishing detection is enabled.
  93.    */
  94.   readCheckPhish: function ()
  95.   {
  96.     var phishEnabled = document.getElementById("browser.safebrowsing.enabled").value;
  97.  
  98.     var checkPhish = document.getElementById("checkPhishChoice");
  99.     var loadList = document.getElementById("onloadProvider");
  100.     var onloadAfter = document.getElementById("onloadAfter");
  101.  
  102.     checkPhish.disabled = onloadAfter.disabled = !phishEnabled;
  103.     loadList.disabled = !phishEnabled;
  104.  
  105.     // don't override pref value
  106.     return undefined;
  107.   },
  108.  
  109.   /**
  110.    * Displays the currently-used phishing provider's EULA and offers the user
  111.    * the choice of cancelling the enabling of phishing, but only if the user has
  112.    * not previously agreed to the provider's EULA before.
  113.    *
  114.    * @param   providerNum
  115.    *          the number of the provider whose policy should be displayed
  116.    * @returns bool
  117.    *          true if the user still wants to enable phishing protection with
  118.    *          the current provider, false otherwise
  119.    */
  120.   _userAgreedToPhishingEULA: function (providerNum)
  121.   {
  122.     // create the opt-in preference element for the provider
  123.     const prefName = "browser.safebrowsing.provider." +
  124.                      providerNum +
  125.                      ".privacy.optedIn";
  126.     var pref = document.getElementById(prefName);
  127.  
  128.     if (!pref) {
  129.       pref = document.createElement("preference");
  130.       pref.setAttribute("type", "bool");
  131.       pref.id = prefName;
  132.       pref.setAttribute("name", prefName);
  133.       document.getElementById("securityPreferences").appendChild(pref);
  134.     }
  135.  
  136.     // only show privacy policy if it hasn't already been shown or the user
  137.     // hasn't agreed to it
  138.     if (!pref.value) {
  139.       var rv = { userAgreed: false, providerNum: providerNum };
  140.       document.documentElement.openSubDialog("chrome://browser/content/preferences/phishEULA.xul",
  141.                                              "resizable", rv);
  142.  
  143.       // mark this provider as having had its privacy policy accepted if it was
  144.       if (rv.userAgreed)
  145.         pref.value = true;
  146.  
  147.       return rv.userAgreed;
  148.     }
  149.  
  150.     // user has previously agreed
  151.     return true;
  152.   },
  153.  
  154.   /**
  155.    * Displays a privacy policy if the user enables onload anti-phishing
  156.    * checking. The policy must be accepted if onload checking is to be enabled,
  157.    * and if it isn't we revert to downloaded list-based checking.
  158.    */
  159.   writePhishChoice: function ()
  160.   {
  161.     var radio = document.getElementById("checkPhishChoice");
  162.     var provider = document.getElementById("browser.safebrowsing.dataProvider");
  163.  
  164.     // display a privacy policy if onload checking is being enabled
  165.     if (radio.value == "true" &&
  166.         !this._userAgreedToPhishingEULA(provider.value)) {
  167.       radio.value = "false";
  168.       return false;
  169.     }
  170.  
  171.     // don't override pref value
  172.     return undefined;
  173.   },
  174.  
  175.   /**
  176.    * Ensures that the user has agreed to the selected provider's privacy policy
  177.    * if safe browsing is enabled.
  178.    */
  179.   onSBChange: function ()
  180.   {
  181.     var phishEnabled = document.getElementById("browser.safebrowsing.enabled").value;
  182.     var remoteLookup = document.getElementById("browser.safebrowsing.remoteLookups");
  183.     var providerNum = document.getElementById("onloadProvider").value;
  184.  
  185.     if (phishEnabled && remoteLookup.value &&
  186.         !this._userAgreedToPhishingEULA(providerNum))
  187.       remoteLookup.value = false;
  188.   },
  189.  
  190.   /**
  191.    * Populates the menulist of providers of cached phishing lists if the
  192.    * menulist isn't already populated.
  193.    */
  194.   readOnloadPhishProvider: function ()
  195.   {
  196.     const Cc = Components.classes, Ci = Components.interfaces;
  197.     const onloadPopupId = "onloadPhishPopup";
  198.     var popup = document.getElementById(onloadPopupId);
  199.  
  200.     if (!popup) {
  201.       var providerBranch = Cc["@mozilla.org/preferences-service;1"]
  202.                              .getService(Ci.nsIPrefService)
  203.                              .getBranch("browser.safebrowsing.provider.");
  204.  
  205.       // fill in onload phishing list data -- but require a privacy policy
  206.       // URL be provided, and require it to be at a chrome URL so it's always
  207.       // available
  208.       var kids = providerBranch.getChildList("", {});
  209.       var providers = [];
  210.       var hasPrivacyPolicy = {};
  211.       for (var i = 0; i < kids.length; i++) {
  212.         var curr = kids[i];
  213.         var matchesName = curr.match(/^(\d+)\.name$/);
  214.         var matchesPolicy = curr.match(/^(\d+)\.privacy\.url$/);
  215.  
  216.         // skip preferences which aren't names or privacy URLs
  217.         if (!matchesName && !matchesPolicy)
  218.           continue;
  219.  
  220.         if (matchesName)
  221.           providers.push(matchesName[1]);
  222.         else
  223.           hasPrivacyPolicy[matchesPolicy[1]] = true;
  224.       }
  225.  
  226.       // construct the menu only from the providers with policies
  227.       for (var i = 0; i < providers.length; i++) {
  228.         // skip providers without a privacy policy
  229.         if (!(providers[i] in hasPrivacyPolicy))
  230.           continue;
  231.  
  232.         // ensure privacy URL is a chrome URL
  233.         try {
  234.           var providerNum = providers[i];
  235.           var url = providerBranch.getCharPref(providerNum + ".privacy.url");
  236.           var fallbackurl = providerBranch.getCharPref(providerNum +
  237.                                                        ".privacy.fallbackurl");
  238.           var scheme = Cc["@mozilla.org/network/io-service;1"].
  239.                        getService(Ci.nsIIOService).
  240.                        extractScheme(fallbackurl);
  241.           if (scheme != "chrome")
  242.             throw "fallbackurl scheme must be chrome";
  243.         }
  244.         catch (e) {
  245.           // don't add this provider
  246.           continue;
  247.         }
  248.  
  249.         if (!popup) {
  250.           popup = document.createElement("menupopup");
  251.           popup.id = onloadPopupId;
  252.         }
  253.  
  254.         var providerName = providerBranch.getCharPref(providerNum + ".name");
  255.  
  256.         var item = document.createElement("menuitem");
  257.         item.setAttribute("value", providerNum);
  258.         item.setAttribute("label", providerName);
  259.         popup.appendChild(item);
  260.       }
  261.  
  262.       var onloadProviders = document.getElementById("onloadProvider");
  263.       onloadProviders.appendChild(popup);
  264.     }
  265.  
  266.     // don't override the preference value in determining the right menuitem
  267.     return undefined;
  268.   },
  269.  
  270.   /**
  271.    * Requires that the user agree to the new phishing provider's EULA when the
  272.    * provider is changed, disabling protection if the user doesn't agree.
  273.    */
  274.   onProviderChanged: function ()
  275.   {
  276.     var pref = document.getElementById("browser.safebrowsing.dataProvider");
  277.     var remoteLookup = document.getElementById("browser.safebrowsing.remoteLookups");
  278.  
  279.     remoteLookup.value = this._userAgreedToPhishingEULA(pref.value);
  280.   },
  281.  
  282.   // PASSWORDS
  283.  
  284.   /*
  285.    * Preferences:
  286.    *
  287.    * signon.rememberSignons
  288.    * - true if passwords are remembered, false otherwise
  289.    */
  290.  
  291.   /**
  292.    * Enables/disables the Exceptions button used to configure sites where
  293.    * passwords are never saved.
  294.    */
  295.   readSavePasswords: function ()
  296.   {
  297.     var pref = document.getElementById("signon.rememberSignons");
  298.     var excepts = document.getElementById("passwordExceptions");
  299.  
  300.     excepts.disabled = !pref.value;
  301.  
  302.     // don't override pref value in UI
  303.     return undefined;
  304.   },
  305.  
  306.   /**
  307.    * Displays a dialog in which the user can view and modify the list of sites
  308.    * where passwords are never saved.
  309.    */
  310.   showPasswordExceptions: function ()
  311.   {
  312.     document.documentElement.openWindow("Toolkit:PasswordManagerExceptions",
  313.                                         "chrome://passwordmgr/content/passwordManagerExceptions.xul",
  314.                                         "", null);
  315.   },
  316.  
  317.   /**
  318.    * Initializes master password UI: the "use master password" checkbox, selects
  319.    * the master password button to show, and enables/disables it as necessary.
  320.    * The master password is controlled by various bits of NSS functionality, so
  321.    * the UI for it can't be controlled by the normal preference bindings.
  322.    */
  323.   _initMasterPasswordUI: function ()
  324.   {
  325.     var noMP = !this._masterPasswordSet();
  326.  
  327.     var button = document.getElementById("changeMasterPassword");
  328.     button.disabled = noMP;
  329.  
  330.     var checkbox = document.getElementById("useMasterPassword");
  331.     checkbox.checked = !noMP;
  332.   },
  333.  
  334.   /**
  335.    * Returns true if the user has a master password set and false otherwise.
  336.    */
  337.   _masterPasswordSet: function ()
  338.   {
  339.     const Cc = Components.classes, Ci = Components.interfaces;
  340.     var secmodDB = Cc["@mozilla.org/security/pkcs11moduledb;1"]
  341.                      .getService(Ci.nsIPKCS11ModuleDB);
  342.     var slot = secmodDB.findSlotByName("");
  343.     if (slot) {
  344.       var status = slot.status;
  345.       var hasMP = status != Ci.nsIPKCS11Slot.SLOT_UNINITIALIZED &&
  346.                   status != Ci.nsIPKCS11Slot.SLOT_READY;
  347.       return hasMP;
  348.     } else {
  349.       // XXX I have no bloody idea what this means
  350.       return false;
  351.     }
  352.   },
  353.  
  354.   /**
  355.    * Enables/disables the master password button depending on the state of the
  356.    * "use master password" checkbox, and prompts for master password removal if
  357.    * one is set.
  358.    */
  359.   updateMasterPasswordButton: function ()
  360.   {
  361.     var checkbox = document.getElementById("useMasterPassword");
  362.     var button = document.getElementById("changeMasterPassword");
  363.     button.disabled = !checkbox.checked;
  364.  
  365.     // unchecking the checkbox should try to immediately remove the master
  366.     // password, because it's impossible to non-destructively remove the master
  367.     // password used to encrypt all the passwords without providing it (by
  368.     // design), and it would be extremely odd to pop up that dialog when the
  369.     // user closes the prefwindow and saves his settings
  370.     if (!checkbox.checked)
  371.       this._removeMasterPassword();
  372.     else
  373.       this.changeMasterPassword();
  374.  
  375.     this._initMasterPasswordUI();
  376.   },
  377.  
  378.   /**
  379.    * Displays the "remove master password" dialog to allow the user to remove
  380.    * the current master password.  When the dialog is dismissed, master password
  381.    * UI is automatically updated.
  382.    */
  383.   _removeMasterPassword: function ()
  384.   {
  385.     var secmodDB = Components.classes["@mozilla.org/security/pkcs11moduledb;1"]
  386.                               .getService(Components.interfaces.nsIPKCS11ModuleDB);
  387.     if (secmodDB.isFIPSEnabled) {
  388.       var bundle = document.getElementById("bundlePreferences");
  389.       promptService.alert(window,
  390.                           bundle.getString("pw_change_failed_title"),
  391.                           bundle.getString("pw_change2empty_in_fips_mode"));
  392.     }
  393.     else {
  394.       document.documentElement.openSubDialog("chrome://mozapps/content/preferences/removemp.xul",
  395.                                              "", null);
  396.     }
  397.     this._initMasterPasswordUI();
  398.   },
  399.  
  400.   /**
  401.    * Displays a dialog in which the master password may be changed.
  402.    */
  403.   changeMasterPassword: function ()
  404.   {
  405.     document.documentElement.openSubDialog("chrome://mozapps/content/preferences/changemp.xul",
  406.                                            "", null);
  407.     this._initMasterPasswordUI();
  408.   },
  409.  
  410.   /**
  411.    * Shows the sites where the user has saved passwords and the associated login
  412.    * information.
  413.    */
  414.   showPasswords: function ()
  415.   {
  416.     document.documentElement.openWindow("Toolkit:PasswordManager",
  417.                                         "chrome://passwordmgr/content/passwordManager.xul",
  418.                                         "", null);
  419.   },
  420.  
  421.  
  422.   // WARNING MESSAGES
  423.  
  424.   /**
  425.    * Displays the security warnings dialog which allows changing the
  426.    * "submitting unencrypted information", "moving from secure to unsecure",
  427.    * etc. dialogs that every user immediately disables when he sees them.
  428.    */
  429.   showWarningMessageSettings: function ()
  430.   {
  431.     document.documentElement.openSubDialog("chrome://browser/content/preferences/securityWarnings.xul",
  432.                                            "", null);
  433.   }
  434.  
  435. };
  436.